# from paddleocr import PaddleOCR
from PIL import Image
import numpy as np
import base64
import io
import threading
import re
import gc
import os
from datetime import datetime

# 在应用启动时初始化 OCR 实例
# ocr_engine = PaddleOCR(use_angle_cls=False, lang="ch", cls_thresh=1, use_gpu=False)
ocr_lock = threading.Lock()  # 用于同步访问 OCR 引擎
import time
import re

def extract_keywords(text):
    # 合并后的正则表达式：
    # 1. 匹配手机号码（1开头，11位）|
    # 2. 匹配其他关键词（6-20位字母数字下划线减号）
    pattern = r'(?:1[3-9]\d{9}|[a-zA-Z0-9_-]{6,20})'

    keywords = re.findall(pattern, text)
    # 去重（保留顺序）
    return list(dict.fromkeys(keywords))

def userNameOcr(path_or_base64, ocr_engine):
    with ocr_lock:
        if path_or_base64.startswith('data:image'):
            # 去除 base64 字符串中的头部信息（例如 'data:image/jpeg;base64,'）
            path_or_base64 = path_or_base64.split(',')[1]
        # 打开图片
        # image = Image.open(path)
        image_data = base64.b64decode(path_or_base64)  # 解码 base64 字符串
        image = Image.open(io.BytesIO(image_data))  # 将字节数据转换为图片
        # 截取用户姓名和用户信息区域
        userName_image = image.crop((0, 2070, 1080, 2200))

        # now = datetime.now()
        # formatted_date = now.strftime("%Y_%m_%d")
        # # 生成基于时间戳的文件名
        # timestamp = int(time.time() * 1000)  # 毫秒级时间戳
        # unique_filename = f"{timestamp}.jpg"  # 使用时间戳作为文件名
        # save_path = f"{formatted_date}/AIGCGD/{unique_filename}"  # 保存路径
        # os.makedirs(os.path.dirname(save_path), exist_ok=True)
        # # 保存裁剪后的图像
        # userName_image.save(save_path)

        # 将 PIL 图像转换为 numpy 数组
        userName_image_np = np.array(userName_image)

        #userName = ocr_engine.ocr(userName_image_np)
        # user = ""
        # try:
        #     for line in userName[0]:
        #         user = user + " " + line[1][0]
        # except:
        #     user = ""

        ocr_results = ocr_engine.readtext(userName_image_np, detail=0)
        print(ocr_results)
        user = ''.join(ocr_results[0:len(ocr_results) - 1])

        # print("userNameOcr===="+user)
        if len(user)<= 0:
            return True
        else:
            return False


# 识别此区域 0,692,1080,147
# 264,759,913,816  用户名
# 49,946,873,1240   详细内容
def imgPrivateOcr(userInfo_image,ocr_engine):
    img_np = np.array(userInfo_image)
    ocr_results = ocr_engine.readtext(img_np)
    return ocr_results




def imgOcr(path_or_base64,keyword):
    # 解码和图像处理部分无需加锁
    image_data = base64.b64decode(
        path_or_base64.split(',')[1] if path_or_base64.startswith('data:image') else path_or_base64)


    with io.BytesIO(image_data) as buffer, Image.open(buffer) as image:
        # 进行裁剪，获取需要的区域
        temp_image = image.crop((0, 712, 1080, 1500))
        # 生成基于时间戳的文件名
        timestamp = int(time.time() * 1000)  # 毫秒级时间戳
        unique_filename = f"{timestamp}.jpg"  # 使用时间戳作为文件名

        now = datetime.now()
        formatted_date = now.strftime("%Y_%m_%d")

        save_path = f"{formatted_date}/{keyword}/{unique_filename}"  # 保存路径
        os.makedirs(os.path.dirname(save_path), exist_ok=True)
        # 保存裁剪后的图像
        temp_image.save(save_path)


